package com.atguigu.partition;

import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

/**
 * @author gmd
 * @desc 自定义分区器的使用示例
 * @since 2024-11-25 10:20:48
 */
public class PartitionCustom {

    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(new Configuration());
        env.setParallelism(2);

        DataStreamSource<String> socketDS = env.socketTextStream("127.0.0.1", 7777);

        socketDS.partitionCustom(new MyPartitioner(), r->r)
                .print();

        env.execute();
    }

    /*
     * 在 Flink 中，分区是指将数据流划分为多个子集的过程。分区是 Flink 中的一个重要概念，它用于控制数据的并行处理和分布式存储。
     *
     * Flink 中的分区是通过分区器（Partitioner）来实现的。分区器是一个接口，它定义了将数据分配到不同分区的规则。
     * Flink 提供了多种分区器，包括基于键的分区器、随机分区器等。
     *
     * 在 Flink 中，分区的目的是为了提高数据处理的并行度和性能。通过将数据分区，可以将数据分散到多个并行任务中进行处理，从而提高处理速度。
     * 此外，分区还可以帮助 Flink 在分布式环境中进行数据存储和传输。
     *
     * 总结来说，分区是 Flink 中一种数据处理的方式，用于将数据流划分为多个子集，以提高并行度和性能，并且在分布式环境中进行数据存储和传输。
     */

}
